#include "./include/mprpcconfig.h"

//负责解析加载配置文件
void MprpcConfig::LoadConfigFile(const char *config_file)
{
    FILE *pf = fopen(config_file, "r");
    if (pf == nullptr)
    {
        std::cout << config_file << " is note exist!" << std::endl;
        exit(EXIT_FAILURE);
    }
    /*
    1.注释
    2.正确的配置项
    3.去掉开头多余的空格
    */
    while (!feof(pf))
    {
        char buf[512] = {0};
        fgets(buf, sizeof(buf), pf);

        //先检测每一行前面是否有空格，有空格的话就去掉
        std::string src_buf(buf);

        int index;
        Trim(src_buf);

        //判断‘#’号注释
        if (src_buf[0] == '#' || src_buf.empty())
        {
            continue;
        }

        //解析配置项，等号进行解析
        index = src_buf.find('=', 0);
        if (index == -1)
        {
            //配置项不合法
            continue;
        }
        std::string key(src_buf.begin(), src_buf.begin() + index);
        std::string value(src_buf.begin() + index + 1, src_buf.end());
        Trim(key); //防止等号左右有空格
        
        //防止地址格式为127.0.0.1    \n
        index  = value.find('\n',0);
        value = value.substr(0,index);
        Trim(value);
        m_configMap[key] = value;
    }
}

std::string MprpcConfig::Load(std::string key)
{
    if (m_configMap.find(key) == m_configMap.end())
    {
        return "";
    }
    return m_configMap[key];
}

void MprpcConfig::Trim(std::string &src_buf)
{
    int index = src_buf.find_first_not_of(' ', 0);
    if (index != -1)
    {
        //说明字符串前面有空格
        src_buf = std::string(src_buf.begin() + index, src_buf.end());
    }
    //去掉字符串后面多余的空格
    index = src_buf.find_last_not_of(' ');
    //找到了后面第一个不是空格的
    if (index != -1)
    {
        src_buf = src_buf.substr(0, index + 1);
    }
}

